package pr.vodafone.resources;

import java.net.URI;
import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;

import com.sun.jersey.api.NotFoundException;

import pr.vodafone.dao.dto.Factura;
import pr.vodafone.dao.dto.Linea;
import pr.vodafone.service.ServiceProvider;


//Will map the resource to the URL facturas
@Path("/clientes/{dni}/lineas/{numeroTelefono}/facturas")
public class FacturasResource {
	
	@Context
	UriInfo uriInfo;
	
		

	// Return the list of facturas for applications
		@GET
		@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
		public List<Factura> getFacturas(@PathParam("dni") String dni, @PathParam("numeroTelefono") String numeroTelefono) {
			List<Factura> facturas = new ArrayList<Factura>();
			//llamar a la bd
			ServiceProvider serviceProvider = new ServiceProvider();
			facturas.addAll(serviceProvider.obtenerFacturas(dni, numeroTelefono));
			
			return facturas; 
		}
		
		@POST
		@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
		public Response newFactura(Factura factura, @PathParam("dni") String dni, @PathParam("numeroTelefono") String numeroTelefono) {
			Response res;
			
			ServiceProvider serviceProvider = new ServiceProvider();
			
			if(serviceProvider.obtenerFactura(dni, numeroTelefono, factura.getIdFactura())!=null){
				res = Response.status(409).entity("Post: Todo with " + factura.getIdFactura() +  " already exists").build();
			}else{
				URI uri= uriInfo.getAbsolutePathBuilder().path(Integer.toString(factura.getIdFactura())).build();
				boolean insertado=serviceProvider.insertFactura(dni, numeroTelefono, factura);
				if(insertado){
					res = Response.created(uri).entity(factura).build(); // Code: 201
				}else{
					res= Response.status(404).entity("Error al insertar la factura").build();
				}
			}
			
//				
			return res;
		}
		
		// Defines that the next path parameter after facturas is
		// treated as a parameter and passed to the FacturaResources
		// Allows to type http://localhost:8080/pr.vodafone/rest/facturas/1
		// 1 will be treaded as parameter factura and passed to FacturaResource
		@Path("{factura}")
		public FacturaResource getFactura(
				@PathParam("dni") String dni, @PathParam("numeroTelefono") String numeroTelefono ,@PathParam("factura") int idFactura) {
			return new FacturaResource(dni, numeroTelefono, idFactura);
		}
		
				
}


